package com.niit.cms.service.impl;

import com.github.pagehelper.PageHelper;
import com.niit.cms.entity.Course;
import com.niit.cms.dao.CourseDao;
import com.niit.cms.service.CourseService;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Course)表服务实现类
 *
 * @author makejava
 * @since 2022-06-22 21:42:51
 */
@Service("courseService")
public class CourseServiceImpl implements CourseService {
    @Resource
    private CourseDao courseDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public Course queryById(Integer id) {
        return this.courseDao.queryById(id);
    }

    /**
     * 按条件查询数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @return 对象列表
     */
    @Override
    public List<Course> queryOrderedListByCourse(Course course, String sort){
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryOrderedListByCourse(course, sort);
    };

    /**
     * 按条件查询指定行数据并排序
     *
     *@Param limitSize 查询范围
     * @param sort 排序条件
     * @param course 查询条件
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryOrderedListByCourseLimit(Course course, String sort, Integer limitSize) {
        return courseDao.queryOrderedListByCourseLimit(course, sort, limitSize);
    }

    /**
     * 按条件查询数据
     *
     * @param course   查询条件
     *
     * @return 对象列表
     */
    @Override
    public List<Course> queryListByCourse(Course course){
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryListByCourse(course);
    };

    /**
     * 分页查询
     *
     * @param course      筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @Override
    public Page<Course> queryByPage(Course course, PageRequest pageRequest) {
        long total = this.courseDao.count(course);
        return new PageImpl<>(this.courseDao.queryAllByLimit(course, pageRequest), pageRequest, total);
    }


    /**
     * 按分类查询指定行数据并排序
     *
     *@Param limitSize 查询范围
     * @param sort 排序条件
     * @param type 分类
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryOrderedListByTypeLimit(Integer type, String sort, Integer limitSize) {
        return courseDao.queryOrderedListByTypeLimit(type, sort, limitSize);
    }
    /**
     * 按父分类查询全部数据
     *
     *@Param course
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryListByParentType(Course course) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryListByParentType(course);
    }
    /**
     * 按父分类查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryOrderedListByParentType(Course course, String sort) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryOrderedListByParentType(course, sort);
    }
    /**
     * 按关键词查询全部数据
     *
     *@Param keyword
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryListByKeyword(Course course, String keyword) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryListByKeyword(keyword);
    }
    /**
     * 按条件和关键词查询数据并排序
     *
     * @param course   查询条件
     * @param sort 排序条件
     * @param keyword 关键词
     * @return 对象列表
     */
    @Override
    public List<Course> queryOrderedListByCourseKeyword(Course course, String sort, String keyword) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryOrderedListByCourseKeyword(course, sort, keyword);
    }
    /**
     * 按父分类和关键词查询全部数据并排序
     *
     *@Param course
     * @Param sort
     * @param keyword
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryOrderedListByParentTypeKeyword(Course course, String sort, String keyword) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryOrderedListByParentTypeKeyword(course, sort, keyword);
    }
    /**
     * 按条件和关键词查询数据
     *
     * @param course   查询条件
     * @param  keyword
     * @return 对象列表
     */
    @Override
    public List<Course> queryListByCourseKeyword(Course course, String keyword) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryListByCourseKeyword(course, keyword);
    }
    /**
     * 按父分类和关键词查询全部数据
     *
     *@Param course
     * @param keyword
     * @return 对象列表
     *
     */
    @Override
    public List<Course> queryListByParentTypeKeyword(Course course, String keyword) {
        //在调用Mapper查询之前，增加分页相关代码
        PageHelper.startPage(course.getPage(),course.getRows());
        return courseDao.queryListByParentTypeKeyword(course, keyword);
    }
    /**
     * 修改数据
     *
     * @param course
     *
     */
    @Override
    public int update(Course course) {
        return courseDao.update(course);
    }
}
